﻿using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace 依赖属性
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            foreach (var item in tray.SelectedItems)
            {
                MessageBox.Show($"{item.Name.ToString()} 移动坐标 = ({item.Tag.ToString()})");
            }
        }
    }




    /*
     首先是MyPropertyProperty成员，它被声明为DependencyProperty 类型，
    且用DependencyProperty的Register方法注册，而在注册的时候，传入了4个参数。

     第一个参数“MyProperty”：这个MyProperty其实是一个类似普通属性包装器的名字。
         经过依赖属性系统注册后，将来MyProperty就代表了MyPropertyProperty依赖属性。
     
     第二个参数typeof(int)：表示这个MyPropertyProperty的数据类型，
         也就是我们在使用MyProperty时的数据类型，这里被声明成int型。注意这里要求传入数据类型的反射。
     
     第三个参数typeof(ownerclass)：表示当前这个MyPropertyProperty依赖属性是属于哪个类的，
         一般填写当前这个类型。
     
     第四个参数new PropertyMetadata(0)：表示传入一个PropertyMetadata属性元数据。
         这个PropertyMetadata定义了MyPropertyProperty依赖属性的默认值和回调函数。
         回调函数就是当属性值发生改变时要执行的逻辑代码。
     
     其次是MyProperty成员，它由CLR属性包装器实现get和set，并且使用了
         GetValue 和 SetValue成员去读出和写入MyPropertyProperty依赖属性。

    我们要在某个类中自定义一个依赖属性，那么这个类一定要继承DependencyObject基类。
     */
    //public int MyProperty
    //{
    //    get { return (int)GetValue(MyPropertyProperty); }
    //    set { SetValue(MyPropertyProperty, value); }
    //}

    //// Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
    //public static readonly DependencyProperty MyPropertyProperty =
    //    DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));



    //输入propa按下tab键快速创建依赖属性
    //public static int GetMyProperty(DependencyObject obj)
    //{
    //    return (int)obj.GetValue(MyPropertyProperty);
    //}

    //public static void SetMyProperty(DependencyObject obj, int value)
    //{
    //    obj.SetValue(MyPropertyProperty, value);
    //}

    //// Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
    //public static readonly DependencyProperty MyPropertyProperty =
    //    DependencyProperty.RegisterAttached("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));


}